/*
 * Copyright (c) YouYuan 2018. https://gitee.com/you-yuan
 */

package com.yuan.util.crypt;

import org.apache.commons.codec.digest.DigestUtils;

/**
 * 摘要算法工具类
 * @author YouYuan
 * @version 1.0
 * @date 2018/12/11 14:24
 */
public class DigestUtil {

    private DigestUtil(){}

    /**
     * 计算字符串的MD5
     * @param data
     * @return
     */
    public static String md5Hex(String data){
        return DigestUtils.md5Hex(data);
    }

    /**
     * 计算byte的MD5
     * @param data
     * @return
     */
    public static String md5Hex(byte[] data){
        return DigestUtils.md5Hex(data);
    }

    /**
     * 计算给定数据的MD5，重复计算指定次数
     * @param data 数据
     * @param repeat 重复计算的次数
     * @return data重复计算repeat次的MD5
     */
    public static String md5HexRepeat(String data, int repeat){
        if (repeat < 1) {
            throw new IllegalArgumentException("repeat不能小于1");
        }
        String result = data;
        for (int i = 0; i < repeat; i++) {
            result = DigestUtils.md5Hex(result);
        }
        return result;
    }

    public static String md5HexRepeat(byte[] data, int repeat){
        if (repeat < 1) {
            throw new IllegalArgumentException("repeat不能小于1");
        }
        String result = DigestUtils.md5Hex(data);
        for (int i = 1; i < repeat; i++) {
            result = DigestUtils.md5Hex(result);
        }
        return result;
    }

    public static byte[] md5(byte[] data){
        return DigestUtils.md5(data);
    }

    public static byte[] md5(String data){
        return DigestUtils.md5(data);
    }

    public static byte[] sha(String data){
        return DigestUtils.sha(data);
    }

    public static byte[] sha(byte[] data){
        return DigestUtils.sha(data);
    }

    public static String shaHex(String data){
        return DigestUtils.shaHex(data);
    }

    public static String shaHex(byte[] data){
        return DigestUtils.shaHex(data);
    }

}
